﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ECommerce.Action.Productos
{
    public static class Productos
    {
        public enum ActionType
        { 
            Copiar = 0,
            Mover = 1
        }
        public static void Action(ECommerce.Model.Productos.Familia FamiliaOrigen, ECommerce.Model.Productos.Familia FamiliaDestino, ECommerce.Model.Productos.Producto Producto, ECommerce.Action.Productos.Productos.ActionType ActionType, bool QuitarDelNombre, string Texto)
        {
            switch (ActionType)
            {
                case ActionType.Copiar:
                    ECommerce.Action.Productos.Productos.Agregar(FamiliaDestino, Producto);
                    break;
                case ActionType.Mover:
                    ECommerce.Action.Productos.Productos.Agregar(FamiliaDestino, Producto);
                    ECommerce.Action.Productos.Productos.Quitar(FamiliaOrigen, Producto);
                    break;
            }
            if (QuitarDelNombre)
                ECommerce.Action.Productos.Productos.QuitarDelNombre(FamiliaDestino, Producto, Texto);
        }
        public static void Agregar(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto)
        {
            ECommerce.DAO.SQL.Productos.Producto.AddFamiliaToProduct(Familia, Producto);
            //Limpio el Cache para esa Familia
            ECommerce.DAO.Cache.Productos.Producto.DelProductosByIdFamilia(Familia.Id);
            ECommerce.DAO.Cache.Productos.Familia.DelFamilia(Familia);
            //Limpio el Cache para ese Producto
            ECommerce.DAO.Cache.Productos.Producto.DelProducto(Producto);
        }
        public static void Quitar(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto)
        {
            ECommerce.DAO.SQL.Productos.Producto.DelFamiliaFromProduct(Familia, Producto);
            //Limpio el Cache para esa Familia
            ECommerce.DAO.Cache.Productos.Producto.DelProductosByIdFamilia(Familia.Id);
            ECommerce.DAO.Cache.Productos.Familia.DelFamilia(Familia);
            //Limpio el Cache para ese Producto
            ECommerce.DAO.Cache.Productos.Producto.DelProducto(Producto);
        }
        public static void QuitarDelNombre(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto, string Texto)
        {
            if (Texto!="")
                Producto.Denominación = Producto.Denominación.Replace(Texto,"").Replace(Familia.Denominación, "").Replace(Familia.Denominación.ToUpper(), "").Replace(Familia.Denominación.ToLower(), "").Trim();
            else
                Producto.Denominación = Producto.Denominación.Replace(Familia.Denominación, "").Replace(Familia.Denominación.ToUpper(), "").Replace(Familia.Denominación.ToLower(), "").Trim();
            if (Familia.Denominación == "Japón")
                Producto.Denominación = Producto.Denominación.Replace("Japan", "").Replace("JAPAN", "").Replace("Japon", "").Replace("JAPON", "").Trim();
            if (Familia.Denominación == "Bujías")
                Producto.Denominación = Producto.Denominación.Replace("Bujias", "").Replace("Bujia", "").Replace("BUJIAS", "").Replace("BUJIA", "").Trim();
            Producto.Save();
            //Limpio el Cache para ese Producto
            ECommerce.DAO.Cache.Productos.Producto.DelProducto(Producto);

        }

        public static void Action(ECommerce.Model.Productos.Familia FamiliaOrigen, ECommerce.Model.Productos.Familia FamiliaDestino, ECommerce.Model.Productos.Producto[] Productos, ECommerce.Action.Productos.Productos.ActionType ActionType, bool QuitarDelNombre, string Texto)
        {
            foreach (ECommerce.Model.Productos.Producto Producto in Productos)
            {
                ECommerce.Action.Productos.Productos.Action(FamiliaOrigen, FamiliaDestino, Producto, ActionType, QuitarDelNombre,Texto);
            }
        }
        public static ECommerce.Model.Productos.Producto GetProductoFromObject(ECommerce.Model.Objeto Objeto)
        {
            ECommerce.Model.Productos.Producto result = new ECommerce.Model.Productos.Producto();
            result.Load(Objeto.Id);
            //result = ECommerce.DAO.SQL.Productos.Producto.GetProductoById(Objeto.Id);
            return result;
        }
        public static ECommerce.Model.Productos.Producto[] GetProductosFromObjects(ECommerce.Model.Objeto[] Objetos)
        {
            List<ECommerce.Model.Productos.Producto> result = new List<ECommerce.Model.Productos.Producto>();
            ECommerce.Model.Productos.Producto Producto;
            foreach (ECommerce.Model.Objeto Objeto in Objetos)
            {
                Producto = new ECommerce.Model.Productos.Producto();
                Producto = ECommerce.Action.Productos.Productos.GetProductoFromObject(Objeto);
                if (Producto != null)
                    if (Producto.Id != 0)
                        result.Add(Producto);
            }
            return result.ToArray();
        }
    }
}
